#include "fichierobjet.h"

FichierObjet::FichierObjet()
{
}

void FichierObjet::charger(const char * f,QVector<QVector3D>& vertex,
             QVector<QVector3D>& normale,QVector<uint>& indice)
{
    QFile file(f);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug()<<"impossible d'ouvrir le fichier";
        return;
    }
    QVector<uint> indiceNormal;
    QVector<uint> indiceVertex;
    QVector<QVector3D> temp_normal;
    QVector<QVector3D> temp_vertex;

    int mode=0;


    QTextStream in(&file);
    QString line;
    while (!in.atEnd())
    {
        line = in.readLine();
        QStringList listespace = line.split(" ", QString::SkipEmptyParts);

        if(listespace.size()!=0)
        {
            //vertex
            if(listespace[0].compare("v")==0)
            {
                QVector3D coord;
                coord.setX(listespace[1].toFloat());
                coord.setY(listespace[2].toFloat());
                coord.setZ(listespace[3].toFloat());
                temp_vertex.append(coord);
            }
            //normal
            else if(listespace[0].compare("vn")==0)
            {
                QVector3D coord;
                coord.setX(listespace[1].toFloat());
                coord.setY(listespace[2].toFloat());
                coord.setZ(listespace[3].toFloat());
                temp_normal.append(coord);
            }
            //face
            else if(listespace[0].compare("f")==0)
            {
                //obligation de trianguler donc le nombre de triangle = nombre
                //de composante -2
                for(int i =1;i<listespace.size();i++)
                {
                    if(i>3 && mode)
                    {
                        indiceVertex.append(indiceVertex[indiceVertex.size()-i+1]);
                        indiceVertex.append(indiceVertex[indiceVertex.size()-2]);

                        indiceNormal.append(indiceNormal[indiceNormal.size()-i+1]);
                        indiceNormal.append(indiceNormal[indiceNormal.size()-2]);
                    }

                    QStringList listevaleur = listespace[i].split("/");
                    indiceVertex.append(listevaleur[0].toInt()-1);
                    if(listevaleur.size()==3)
                    {
                        mode=1;
                        indiceNormal.append(listevaleur[2].toInt()-1);
                    }
                }
            }
        }
    }

    vertex.resize(indiceVertex.size());
    normale.resize(indiceNormal.size());
    for(int i=0;i<indiceVertex.size();i++)
    {
        vertex[i]=temp_vertex[indiceVertex[i]];
        if(normale.size()!=0)
            normale[i]=temp_normal[indiceNormal[i]];
    }
    indice = indiceVertex;
}

